<?php
namespace Aplicacao\Controller;

use Base\Controller\AbstractCrudController;
use Zend\View\Exception\RuntimeException;
use Zend\View\Model\ViewModel;
use Zend\View\Model\JsonModel;


/**
 * Controller
 * Controlador das ações de atividades
 * @author DiegoWagner
 * 
 * @see Base\Controller\AbstractCrudController
 *
 */
class AtividadeController extends AbstractCrudController
{
    
    /**
     * @construct
     */
    public function __construct() {
    
    	$this->entity 	  = 'Servidor\Entity\Atividade';
    	$this->form 	  = 'Aplicacao\Form\AtividadeForm';
    	$this->service 	  = 'Servidor\Service\AtividadeService';
    	$this->controller = 'atividade'; 
    	$this->route      = 'atividade';
    	$this->namespace  = 'Aplicacao';
    	$this->pasteView  = 'aplicacao';
    }
    
    
    
    
    /**
     * Override
     * @method indexAction()
     * Responsável por fazer listagem de dados.
     * @see \Zend\Mvc\Controller\AbstractActionController::indexAction()
     * @access public
     */
    public function indexAction() {
    
    	try {
    			
    		$list = $this->getEntityManager()
                		 ->getRepository( $this->entity )
                		 ->buscaTodos();
    			
    			
    		$messages = $this->flashMessenger()
                    		 ->setNamespace($this->namespace)
                    		 ->getMessages();
    			
    		try {
    
    			return new ViewModel(array(
                    					'data' => $list,
                    					'messages' => $messages
    			                     )
    			);
    			
    		} catch ( RuntimeException $r ) {
    
    			$this->flashMessenger()
            			->setNamespace( $this->namespace )
            			->addMessage( array(
            					'error' => $r->getMessage(),
            					'info'  => $r->getTraceAsString()
            			) );
    
    			return $this->redirect()->toRoute(
            					$this->route,
            					array( 'controller' => $this->controller
    					) );
    		}
    
    	} catch( \Exception $e ) {
    
    		$this->flashMessenger()
                		->setNamespace( $this->namespace )
                		->addMessage( array(
                				'error' => $e->getMessage(),
                				'info' => $e->getTraceAsString()
                		) );
    			
    		return $this->redirect()->toRoute(
        				$this->route,
        				array( 'controller' => $this->controller
    				) );
    	}
    
    }
    
    
    
    /**
     * @method reorganizeAction()
     * Método JSON que popula as cidades baseado no estado selecionado no combo
     * @return \Zend\View\Model\JsonModel
     */
    public function reorganizeAction() {
    
    	$ids = $this->params()->fromQuery('ids', 0);
    	$ids = explode('-', $ids);
    	
    	$i = 1;
    	$response = array();
    	
    	$em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
    	$repository = $em->getRepository( $this->entity );
    	
    	foreach ( $ids as $id ) {
    	    
        	$entity = $repository->find( $id );

        	$atividade = $entity->toArray();
    	
        	$atividade['indice'] = $i;
        	
        	$service = $this->getServiceLocator()->get( $this->service );
        	       	
        	if ( $service->save( $atividade ) ) { 
        	    $response['sucess'] = true;
        	} else {
        	    $response['sucess'] = false;
        	    break;
        	}
        	
        	$i++;
        	
    	}
    
    	$jsonModel = new JsonModel( $response );
		$jsonModel->setTerminal(true);
		
		return $jsonModel;
    }
}
